On most modern computers, the process of printing a page of a document comprises a number of steps. Firstly, a software application executing on the computer receives a command to print one or more pages of document. In response, the application sends drawing commands to a “graphics device interface layer” of an operating system of the computer. The graphics device interface layer then sends the drawing commands to a printer driver software module associated with a target printer and which is typically resident on the computer.
Each drawing command is typically referred to as a graphics object. For each graphics object, the printer driver is responsible for generating a description of the graphics object in a format that the target printer can understand. Such a format is referred to as a “page description language”. The printer driver generates a final description of the page to be printed including a description of each of the graphics objects. Such a final description is referred to as a “display list (DL)”.
The display list for the page to be printed is spooled to the target printer. The target printer contains a “page description language interpreter” and a raster image processor (RIP) that interprets the display list and renders the display list as pixel values comprising C, M, Y and K channels. The printer then uses the pixel values to print the page.
Some advanced page description languages provide highly functional commands for drawing text. For example, the following command (1) selects twelve point “Times Roman” font to use for subsequent text output:set_font(“Times Roman”, 12)  (1)
As another example, a number of commands may be issued to draw strings of graphical objects, representing text characters referred to as glyphs, for example, at various locations on a page. The following command (2) draws text starting at location x=20, y=50 on a page.draw_text(20, 50, “The quick brown fox”)  (2)
Such an advanced page description language is typically employed in modern Laser printers.
Sending high-level commands such as those described above to a printer is only possible when the printer has the ability to generate a bitmap of (i.e., rasterize) each glyph from a given font description. The generation of such a bitmap in a printer is typically performed by a component in the printer referred to as a “font rasterizing engine.” For each glyph in a string, a font rasterizing engine rasterizes the glyph and positions the glyph on a page to be printed.
A font description is typically stored as a file in a particular format. One example of a font format is known as the “TrueType Font” format.
Printing systems typically contain a minimal set of printer-resident fonts, which are commonly used fonts (e.g., Times Roman or Courier). When a font is not resident in a printer but is required to render a page, then a font file corresponding to the font is typically downloaded to the printer. Virtually all font rasterizing engines can render fonts in the TrueType font format. Alternatively, if a font format is not recognized by a font rasterizing engine, then an associated printer driver may employ font substitution to match original glyphs with similar glyphs in a known font format. However, if a font cannot be downloaded or a substitution is not appropriate, then a printer driver can request the graphics device interface layer of an associated operating system to convert corresponding glyphs to either bitmap representations or vector representations, as preferred, during generation of a display list. The bitmap representations or vector representations may then be rendered by a printer simply as bitmap or vector graphics primitives without requiring pre-processing by the font rasterizing engine.
Another type of page description language that is used in some printing systems is one that is only capable of rendering image data for a page. Such a page description language is typically employed in inkjet printing systems. In such systems, an associated printer driver contains a raster image processor and renders an entire page of graphics objects as a halftoned image. The image data is then sent to a target printer on a per-band basis and printed.
Still another type of page description language is capable of rendering and compositing both vector graphics primitives and bitmap primitives. However, such a page description language has no font-rasterizing capabilities.
In recent times, font rasterizing software within the graphics device interface layer of a computer has been used for generating bitmap or vector graphics representations of glyphs. As a result, font rasterizing engines and associated printer-resident fonts are no longer required in printers. The advantages of not using the font rasterizing engine and associated printer-resident fonts are that memory and processing requirements in such printers are somewhat simplified and as a result, the cost of the associated printer may be reduced accordingly.
A printer driver associated with the printers described above which do not comprise a font rasterizing engine and associated printer-resident fonts, can construct a display list such that glyphs are added as bitmap representations or vector graphics primitives. The raster image processor of such printer may be configured for rendering edges. Such an edge rendering raster image processor typically renders glyphs as vector graphics primitives.
A page description language for an edge rendering raster image processor may describe an edge by an edge-record. An edge record locates the starting position of the edge on a page to be printed plus a list of points relative to the starting point. The list of points proceeds in a monotonically increasing fashion down the page and is referred to as the segment list. An object such as a glyph may be described by many such edge records.
For example, FIG. 2a shows a page 200 comprising two characters 201 and 202 using the same glyph ‘A’. FIG. 2b shows the page 200, arrows (e.g., 203) representing edge records E1 to E6 associated with the character 201 and arrows (e.g., 207) representing edge records E7 to E12 associated with the character 202. FIG. 2b also shows a representation of a segment list S1 associated with the characters 201 and 202. As represented by FIG. 2b, the edge-record E1 points to the segment list S1. The segment list SI defines the shape of an edge 205 of the character 201. Segment lists such as the segment list SI may be shared between characters on a page since the segment lists are relative to the start of the edge. Segment lists may also be shared between pages (i.e., display lists representing such pages) of a document. As seen in FIG. 2b, an edge 207 of the character 202 also points to the segment list S1. Edge records cannot be shared since edge records store the location of an edge in absolute device coordinates.
FIG. 2c shows a representation of a display list 209 for the page 200. The display list 209 contains the twelve edge records E1 to E12 and the six segment lists S1 to S6.
For a complex font, such as a font representing a Kanji character set, many edge records may be needed to describe a single glyph of the character set. For example, FIG. 3 shows a glyph 300, which requires thirty four (34) edge records to describe the glyph. When there are several thousand such glyphs on a page, then the number of edge records becomes so large that any advantage gained by using edges to render a glyph is lost due to the time to spool an associated display list containing the edge records.
As an example, a page comprising five thousand kanji characters may require over one hundred and thirty three thousand edges. If each edge record is represented by nine bytes, then the display list for the edge records alone is represented by at least one point one (1.1) megabytes of data. For a one hundred page document, the edge records alone require one hundred and ten (110) megabytes of data. As a result, the time to spool the display lists containing the one hundred and ten (110) megabytes of edge records is large.
Thus, a need clearly exists for an improved method of generating a display list for use in rendering.